# encoding:utf-8
import getopt
import os
import re
import socket
from config.all_paths import log_path, report_path


def get_filterFile(file_path, fileName_list=None):
    """
    获取需要过滤的文件列表
    :param file_path: 文件路径
    :param fileName_list: 需要过滤的文件名列表
    :return: 过滤文件的完整路径列表
    """
    if not fileName_list:
        return []
    return [os.path.join(file_path, file) for file in fileName_list]


def list_dir(file_path, file_list=None, fileName_list=None):
    '''
    获取指定路径下面的所有文件目录
    :param file_path:
    :param file_list:
    :return:
    '''
    if file_list is None:
        file_list = []
    # 文件直接返回
    if os.path.isfile(file_path):
        file_list.append(file_path)
        return file_list
    # 如果是目录，则获取该目录下的所有文件路径
    for cur_file in os.listdir(file_path):
        # 获取文件的绝对路径
        path = os.path.join(file_path, cur_file)
        if os.path.isfile(path):  # 判断是否是文件还是目录需要用绝对路径
            file_list.append(path)
        elif os.path.isdir(path):
            list_dir(path, file_list)  # 目录下面又是目录，则递归子目录

    filterList = get_filterFile(file_path, fileName_list)
    # if filterList == []:
    #     pass
    # else:
    #     for filterList_1 in filterList:
    #         file_list.remove(filterList_1)
    #
    # return file_list
    return [f for f in file_list if f not in filterList]


def find_all_data(data, LB='', RB=''):
    """
    从字符串中查找匹配的内容
    :param data: 目标文本
    :param LB: 左边界
    :param RB: 右边界
    :return: 匹配的内容列表
    """
    rule = LB + r'(.+?)' + RB
    data_list = re.findall(rule, data)
    return data_list


def get_opt(argv):
    """
    解析命令行参数
    :param argv: 命令行参数列表
    :return: 解析后的参数字典
    """
    t_opt = {}
    opts, argv = getopt.getopt(argv, "", ["env=", "user=", "type=", "role=", "job=", "mark=", "template="])
    for opt, arg in opts:
        t_opt[opt[2:]] = arg
    return t_opt


def del_report():
    '''
    删除多余的测试报告，只保留9份最新的报告
    :return:
    '''
    file_list = list_dir(report_path, fileName_list=['.gitkeep'])
    if len(file_list) <= 9:
        pass
    else:
        for i in range(len(file_list) - 9):
            os.remove(file_list[i])


def del_logs():
    '''
    删除多余的logs文件，只保留9份最新的log文件
    :return:
    '''
    file_list = list_dir(log_path, fileName_list=['.gitkeep'])
    if len(file_list) <= 9:
        pass
    else:
        for i in range(len(file_list) - 9):
            os.remove(file_list[i])


def get_host_ip():
    """
    查询本机ip地址
    :return:
    """
    _s = None
    try:
        _s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        _s.connect(('8.8.8.8', 80))
        l_host = _s.getsockname()[0]
    finally:
        _s.close()

    return l_host


if __name__ == '__main__':
    pass
